package com.tyae.dao;

import java.util.List;

import com.tyae.bean.Processo;

public class ProcessoDAOHibernate implements ProcessoDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Processo> hibernateDAO = null;

	public ProcessoDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getProcessoDAO();
	}
	
	@Override
	public boolean inserir(Processo processo) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.add(processo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
		return ok;
	}

	@Override
	public boolean alterar(Processo processo) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.update(processo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@Override
	public boolean excluir(Processo processo) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.remove(processo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Processo> getSelecionar(String descricao) {
		String 	sql = "FROM Processo as processo WHERE processo.codigoProcesso <> 0";

		if (!(descricao.isEmpty())) {
			sql += " AND processo.descricao like '" + descricao + "%' ";  
		}
		
		sql += " ORDER BY processo.descricao";		
 
		List<Processo> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		return lista;
	}	

	@Override
	public Processo getProcesso(int codigoProcesso) {
		return hibernateDAO.get(codigoProcesso);
	}

	@Override
	public List<Processo> getListarTodos() {
		return hibernateDAO.listAll();
	}
	
	@Override
	public boolean isExiste(Processo processo) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isExclusaoLiberada(Processo processo) {
		// TODO Auto-generated method stub
		return false;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Processo> getSelecionar(String descricao, int empresa) {
		String 	sql = "FROM Processo as processo WHERE processo.codigoProcesso <> 0";

		if (!(descricao.isEmpty())) {
			sql += " AND processo.descricao like '" + descricao + "%' ";  
		}
		
		sql += " AND processo.empresa = "+empresa;
		sql += " ORDER BY processo.descricao";		
 
		List<Processo> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		return lista;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Processo> getSelecionar(String textoProcesso,
			int codigoEmpresa, String textoAutor, String textoReu) {
		String 	sql = "FROM Processo as processo WHERE processo.codigoProcesso <> 0";

		if (!(textoProcesso.isEmpty())) {
			sql += " AND processo.numeroProcesso like '" + textoProcesso + "%' ";  
		}

		if (!(textoAutor.isEmpty())) {
			sql += " AND processo.autor.pessoa.nome like '" + textoAutor + "%' ";  
		}
		
		if (!(textoAutor.isEmpty())) {
			sql += " AND processo.reu.pessoa.nome like '" + textoReu + "%' ";  
		}
		
		sql += " AND processo.empresa = "+codigoEmpresa;
		sql += " ORDER BY processo.numeroProcesso";		
 
		List<Processo> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		return lista;
	}	

	@Override
	public void initialize(Processo processo){
		Processo p = DAOFactory.getProcessoDAO().getProcesso(processo.getCodigoProcesso());
		processo.setProcessoFases(p.getProcessoFases());
		processo.setAnexos(p.getAnexos());
	}
}
